Windows PowerShell 执行策略

作者:Kenny Chu

主页:https://kennyangel.github.io/

编辑:20231024

上传:20231024

摘要:PowerShell 执行外部下载脚本,可能会碰到由于执行策略权限问题,导致脚本运行失败。当有B/S架构与C/S集成等业务时,如B端下载脚本至本地,本地策略不允许执行,将影响整体流程。本文结合微软官方资料进行精简介绍如何更改策略。

标签:PowerShell

参考资料:


1、错误表现

2、安全策略查看命令

使用管理员权限打开PowerShell,输入以下命令:

3、设置安全策略

通过List命令可以看到,PS安全策略分为五个作用域,因此设置策略时需要指定作用域对象。如不确定具体需要设置哪个作用域,可逐个作用域设置后,再一一排查。

命令格式参考以下命令:

-ExecutionPolicy 指定策略类型,参数取值如下:

参数取值参数释义
AllSigned- 脚本可以运行。
- 要求所有脚本和配置文件都由受信任的发布者签名,包括在本地计算机上编写的脚本。
- 在运行来自尚未分类为可信或不可信的发布者的脚本之前会提示你。
- 存在运行已签名的恶意脚本的风险。
Bypass- 不阻止任何操作,并且没有任何警告或提示。
- 此执行策略专为将 PowerShell 脚本内置到较大应用程序中的配置,或以 PowerShell 为具有自己的安全模型的程序的基础的配置而设计。
Default- 设置默认执行策略。
- Restricted(适用于 Windows 客户端)。
- RemoteSigned(适用于 Windows 服务器)。
RemoteSigned- Windows 服务器计算机的默认执行策略。
- 脚本可以运行。
- 需要受信任的发布者对从 Internet 下载的脚本和配置文件(包括电子邮件和即时消息程序)的数字签名。
- 在本地计算机上编写且不是从 Internet 下载的脚本不需要数字签名。
- 如果脚本已解除阻止(例如通过使用 Unblock-File cmdlet),则运行从 Internet 下载且未签名的脚本。
- 存在运行来自 Internet 以外来源的未签名脚本以及可能存在恶意的签名脚本的风险。
Restricted- Windows 客户端计算机的默认执行策略。
- 允许单个命令,但不允许脚本。
- 阻止运行所有脚本文件,包括格式和配置文件 (.ps1xml)、模块脚本文件 (.psm1) 和 PowerShell 配置文件 (.ps1)。
Undefined- 当前作用域内没有设置执行策略。
- 如果所有作用域内的执行策略均为 Undefined,则对于 Windows 客户端,有效执行策略为 Restricted;对于 Windows Server,有效执行策略为 RemoteSigned。
Unrestricted- 非 Windows 计算机的默认执行策略,无法更改。
- 未签名的脚本可以运行。 存在运行恶意脚本的风险。
- 在运行非来自本地 Intranet 区域的脚本和配置文件之前警告用户。

 

-Scope 指定作用域,参数取值如下:

参数取值参数释义
MachinePolicy通过组策略为计算机的所有用户设置。
UserPolicy通过组策略为计算机的当前用户设置。
ProcessProcess 作用域仅影响当前的 PowerShell 会话。 执行策略保存在环境变量 $env:PSExecutionPolicyPreference 中,而不是注册表中。 关闭 PowerShell 会话时,将删除变量和值。
CurrentUser执行策略仅影响当前用户。 它存储在 HKEY_CURRENT_USER 注册表子项中。
LocalMachine执行策略会影响当前计算机上的所有用户。 它存储在 HKEY_LOCAL_MACHINE 注册表子项中。